window: Don't assume 640x480 max default size
authorBenjamin Otte <otte@redhat.com>
Mon, 25 Nov 2013 01:40:05 +0000 (02:40 +0100)
committerBenjamin Otte <otte@redhat.com>
Mon, 25 Nov 2013 02:49:35 +0000 (03:49 +0100)
Instead, use the monitor's work area.

This might have unforseen side effects that warrant a later revert, such
as:
- Apparently some WMs assume maximizing when a window is maximum screen
  size.
- WMs might not shrink the window by the decorations' size when it tries
  to be fullscreen.
- Applications might have buggy size request code that causes weirdly
  sized windows.

gtk/gtkwindow.c

index 27fc7d1da59b397a8d8a2f6eb86cb08a6e75721e..056260f337d279a9900d3ca23d73c6aaa82226b5 100644 (file)
@@ -5728,13 +5728,6 @@ gtk_window_unmap (GtkWidget *widget)
  *    information from the windowing system.)
  */
 
-/* We use these for now to not make windows too big by accident. Note
- * that we still clamp these numbers by screen size. Also note that
- * minimum size still overrides this. So keep your windows small! :)
- */
-#define MAX_DEFAULT_WINDOW_WIDTH 640
-#define MAX_DEFAULT_WINDOW_HEIGHT 480
-
 static void
 gtk_window_guess_default_size (GtkWindow *window,
                                gint      *width,
@@ -5742,27 +5735,31 @@ gtk_window_guess_default_size (GtkWindow *window,
 {
   GtkWidget *widget;
   GdkScreen *screen;
+  GdkWindow *gdkwindow;
+  GdkRectangle workarea;
   int minimum, natural;
 
   widget = GTK_WIDGET (window);
   screen = gtk_widget_get_screen (widget);
+  gdkwindow = gtk_widget_get_window (GTK_WIDGET (window));
 
-  *width = gdk_screen_get_width (screen);
-  *height = gdk_screen_get_height (screen);
-
-  if (*width >= *height)
+  if (gdkwindow)
     {
-      /* landscape */
-      *width = MIN (*width, MAX_DEFAULT_WINDOW_WIDTH);
-      *height = MIN (*height, MAX_DEFAULT_WINDOW_HEIGHT);
+      gdk_screen_get_monitor_workarea (screen,
+                                       gdk_screen_get_monitor_at_window (screen, gdkwindow),
+                                       &workarea);
     }
   else
     {
-      /* portrait */
-      *width = MIN (*width, MAX_DEFAULT_WINDOW_HEIGHT);
-      *height = MIN (*height, MAX_DEFAULT_WINDOW_WIDTH);
+      /* XXX: Figure out what screen we appear on */
+      gdk_screen_get_monitor_workarea (screen,
+                                       0,
+                                       &workarea);
     }
 
+  *width = workarea.width;
+  *height = workarea.height;
+
   if (gtk_widget_get_request_mode (widget) == GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT)
     {
       gtk_widget_get_preferred_height (widget, &minimum, &natural);